package cn.net.sinodata.system.domain.bo;

import cn.net.sinodata.system.domain.PmMonitorProduct;
import cn.net.sinodata.common.mybatis.core.domain.BaseEntity;
import cn.net.sinodata.common.core.validate.AddGroup;
import cn.net.sinodata.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;

/**
 * 监控产品管理业务对象 pm_monitor_product
 *
 * @author yinliangyun
 * @date 2025-10-30
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PmMonitorProduct.class, reverseConvertGenerate = false)
public class PmMonitorProductBo extends BaseEntity {

    /**
     * 主键
     */
    @NotBlank(message = "主键不能为空", groups = { EditGroup.class })
    private String id;

    /**
     * 产品编号
     */
    @NotBlank(message = "产品编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String productCode;

    /**
     * 产品名称
     */
    @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String productName;

    /**
     * 成交渠道
     */
    @NotBlank(message = "成交渠道不能为空", groups = { AddGroup.class, EditGroup.class })
    private String channelId;

    /**
     * 业务类型（市场类型）
     */
    @NotBlank(message = "业务类型（市场类型）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String bizType;

    /**
     * 确认方式（1-集中-中债接口2-集中-上清接口3-集中-交易后接口4-集中-交易后客户端5-无需确认6-双边-SWIFT电文）
     */
    @NotBlank(message = "确认方式（1-集中-中债接口2-集中-上清接口3-集中-交易后接口4-集中-交易后客户端5-无需确认6-双边-SWIFT电文）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String confirmMode;

    /**
     * 清算方式（1-双边净额清算2-双边全额清算3-集中净额清算4-SGE净额+全额（现阶段表示 SGE（上海黄金交易清算））6-集中清算7-双边净额自行清算13-自行清算）
     */
    @NotBlank(message = "清算方式（1-双边净额清算2-双边全额清算3-集中净额清算4-SGE净额+全额（现阶段表示 SGE（上海黄金交易清算））6-集中清算7-双边净额自行清算13-自行清算）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String clearingMode;

    /**
     * 起息速度
     */
    private String interestRate;

    /**
     * 起息付款币种
     */
    private String interestCurrency;

    /**
     * 结算币种
     */
    private String settlementCurrency;

    /**
     * 清结算场景
     */
    private String settleScene;

    /**
     * 清结算结果获取方式
     */
    private String accessMethod;

    /**
     * 节假日类型
     */
    @NotBlank(message = "节假日类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String holidayType;

    /**
     * 节假日顺延规则
     */
    private String holidayRule;

    /**
     * 是否夏令时
     */
    @NotBlank(message = "是否夏令时不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isSummerTime;

    /**
     * 异常提醒
     */
    private String abnolmalAlert;

    /**
     * 异常提醒规则
     */
    private String abnolmalAlertRole;

    /**
     * 是否需要确认
     */
    @NotBlank(message = "是否需要确认不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isConfirm;

    /**
     * 是否需要清算
     */
    @NotBlank(message = "是否需要清算不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isClearing;

    /**
     * 报文模板
     */
    @NotBlank(message = "报文模板不能为空", groups = { AddGroup.class, EditGroup.class })
    private String messageTemp;

    /**
     * 唯一性判断规则
     */
    @NotBlank(message = "唯一性判断规则不能为空", groups = { AddGroup.class, EditGroup.class })
    private String uniquenessRole;

    /**
     * 优先级
     */
    private String priority;

}
